<?php
	//対象URL
	define(INIT_URL , "http://kakaku.com/tabelog/sitemap/rstlst.asp?pcd=1&area=A0101&PG=1");
	// proxyを利用する場合は 1 / 利用しない場合は0
	$use_proxy = 0;
	//$proxy_host = 'proxy.example.com';
	//$proxy_port = 8080;
	$no_proxy = array(
	    'localhost',        // localhost 
	    '127.0.0.0/8',      // loopback
	);
	include('../init/proxy.php');
	//HTMLを取ってくる
	function get_html($url){
	    $rdata = http_request($url);
			//ASCII,JIS,UTF-8,EUC-JP,SJIS
	    $data = mb_convert_encoding($rdata['data'],"UTF-8","SJIS");	//吐き出すURL,取ってきたURL
	    return ($data);
	}
	//スクレイピング処理
	function dump_nodes_title(tidyNode $node, &$urls = NULL) {

	    $urls = (is_array($urls)) ? $urls : array();

	    if(isset($node->id)) {

	    // ここからが実際のスクレイピング処理と思ってよいでしょう。
	        // $node->id が Aタグだったら
	        if($node->id == TIDY_TAG_A) {
	            $urls[] = array("title" => $node->child[0]->value ,"link" =>$node->attribute['href']);
	            // $node->id に class属性がセットされていれば
	            if (isset($node->attribute['class'])){
	                // $node->id の class属性値がbookmarkだったら
	                if (stristr ($node->attribute['class'] ,"bookmark") !==FALSE){
	                    // <a href="http://ryouchi.seesaa.net/">りょーち</a>
	                    // の場合、「りょーち」の文字を取得するには、
	                    // $node->child[0]->value
	                    // http://ryouchi.seesaa.net/ の文字を取得するには、
	                    // $node->attribute['href']
	                    // $urls にtitle,linkの連想配列として、タイトルとリンクを格納
	                    $urls[] = array("title" => $node->child[0]->value ,"link" =>$node->attribute['href']);
	                }
	            }
	        }
	    // ここまでが実際のスクレイピング処理と思ってよいでしょう。
	    }
	    // 更に子供のノードが存在すれば、再帰的にdump_nodes_title()を繰り返す
	    if($node->hasChildren()) {
	        foreach($node->child as $c) {
	            dump_nodes_title($c, $urls);
	        }
	    }
	    // 連想配列をリターン
	    return $urls;
	}

	// INIT_URLで指定されたHTMLファイルを取得して$dataに格納
	$data = get_html(INIT_URL);
	// Tidy関数で整形する際のおまじない。
	$config = array('indent' => TRUE,
	                'output-xhtml' => TRUE,
	                'wrap' => 200);
	// 取得したHTMLファイルの内容をUTF-8の文字コードで$configで
	// 指定した設定で、tidyオブジェクトを作成
	//utf8,shiftjis
	$tidy = tidy_parse_string($data, $config, utf8);
	// cleanRepairで整形
	$tidy->cleanRepair();
	// 作成したtidyオブジェクトのbody要素の内容をdump_nodes_title()に渡す
	// $urlsにはtitle,linkのペアの配列が格納されている。
	echo $tidy->body()->id;
	$urls = dump_nodes_title($tidy->body());

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />
		<meta name="keywords" content="php,tidy,スクレイピング,API,Webサービス" />
		<meta name="description" content="phpによるスクレイピング処理入門" />
		<title>phpによるスクレイピング処理入門：はてなブックマークの情報を取得</title>
		<link href="style.css" rel="stylesheet" type="text/css">
	</head>
	<body>
<?php
	echo '<a href="'.INIT_URL.'">'.INIT_URL.'</a><br />';
	echo '<div align="left"><ul>';
	// 取得されたurlsをforeachで回す
	foreach ($urls as $item){
	    // $item['link'] / $item['title'] を出力
	    echo '<li><a href="'.$item['link'].'" target="_blank">'.$item['title'].'</a>';
	}
	echo '</ul></div>';
?>
	</body>
</html>